package br.com.conciliador.cadastro.negocio;

import java.util.HashMap;
import java.util.Map;

import org.hibernate.Criteria;
import org.hibernate.Session;

import br.com.conciliador.cadastro.vo.ContaBancoEstLojaVo;
import br.com.conciliador.util.hibernate.business.R2HbNgc;
import br.com.r2.util.hibernate.business.RestritorHb;

public class ContaBancoEstLojaNgc extends R2HbNgc<ContaBancoEstLojaVo>
{

   private Map filtroPropriedade = new HashMap();

   private Map restritores = new HashMap();

   public static final int JOIN_ESTLOJA = 1;

   public static final int JOIN_EMPRESA = 2;

   public static final int JOIN_CONTABANCO = 4;

   private static ContaBancoEstLojaNgc instancia = null;

   private ContaBancoEstLojaNgc()
   {
      init(restritores, filtroPropriedade, ContaBancoEstLojaVo.class);
      addFiltro("contaBanco.codigo", RestritorHb.RESTRITOR_EQ, "contaBancoVo.codigo");
      addFiltro("estLoja.codigo", RestritorHb.RESTRITOR_EQ, "estLojaVo.codigo");
      addFiltro("estLoja.codigo", RestritorHb.RESTRITOR_IN, "filtroVo.listaEstLoja");
      addFiltro("empresa.codigo", RestritorHb.RESTRITOR_EQ, "estLojaVo.estEmpresaVo.codigo");
   }

   public static ContaBancoEstLojaNgc getInstancia()
   {
      if (instancia == null)
      {
         instancia = new ContaBancoEstLojaNgc();
      }
      return instancia;
   }

   @Override
   protected Map filtroPropriedade()
   {
      return filtroPropriedade;
   }

   @Override
   protected Criteria montaCriteria(Session sessao, int join)
   {
      Criteria criteria = sessao.createCriteria(ContaBancoEstLojaVo.class);
      if ((join & JOIN_CONTABANCO) != 0)
      {
         criteria.createCriteria("contaBancoVo", "contaBanco", Criteria.INNER_JOIN);
      }

      if ((join & JOIN_ESTLOJA) != 0)
      {
         criteria.createCriteria("estLojaVo", "estLoja", Criteria.INNER_JOIN);
         if ((join & JOIN_EMPRESA) != 0)
         {
            criteria.createCriteria("estLoja.estEmpresaVo", "empresa", Criteria.INNER_JOIN);
         }
      }
      
      return criteria;
   }

   @Override
   protected Map restritores()
   {
      return restritores;
   }

}
